home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / lpr / longinou.mod < prev    next >
Encoding:
Modula Implementation  |  1994-09-22  |  2.7 KB  |  117 lines

  1. IMPLEMENTATION MODULE LongInOut;
  2.  
  3. IMPORT InOut, Conversions;
  4. FROM   SYSTEM  IMPORT ADDRESS, LONG;
  5.  
  6. TYPE AddCard =  RECORD
  7.                   CASE : BOOLEAN OF
  8.                     TRUE : A : ADDRESS |
  9.                     FALSE: C : LONGCARD
  10.                   END
  11.                 END;
  12.  
  13. VAR T : ARRAY[0..80] OF CHAR;
  14.     Le : CARDINAL;
  15.     res : LONGCARD;
  16.     Dummy : BOOLEAN;
  17.     
  18. CONST NUL = 0C;
  19.  
  20. PROCEDURE Length(VAR S : ARRAY OF CHAR) : CARDINAL;
  21. VAR i : INTEGER;
  22. BEGIN
  23.   i:=0;
  24.   WHILE (S[i]>' ') & (i<HIGH(S)) DO INC(i) END;
  25.   IF S[i]>' ' THEN INC(i) END;
  26.   RETURN i
  27. END Length;
  28.  
  29. PROCEDURE WriteLongInt(x : LONGINT; 
  30.                        L : CARDINAL); (* min. length *)
  31. BEGIN
  32.   Conversions.ConvertToString(ABS(x),10,x<LONG(0),T,Dummy);
  33.   InOut.WriteStringRight(T,L)
  34. END WriteLongInt;
  35.  
  36. PROCEDURE WriteLongCard(x : LONGCARD; 
  37.                         L : CARDINAL); (* min. length *)
  38. BEGIN
  39.   Conversions.ConvertToString(x,10,FALSE,T,Dummy);
  40.   InOut.WriteStringRight(T,L)
  41. END WriteLongCard;
  42.  
  43. PROCEDURE WriteLongOct(x : LONGCARD;
  44.                        L : CARDINAL); (* min. length *)
  45. BEGIN
  46.   Conversions.ConvertToString(x,10B,FALSE,T,Dummy);
  47.   Le:=Length(T);
  48.   T[Le]  :='B';
  49.   T[Le+1]:=NUL;
  50.   InOut.WriteStringRight(T,L)
  51. END WriteLongOct;
  52.  
  53. PROCEDURE WriteLongHex(x : LONGCARD;
  54.                     L : CARDINAL); (* min. length *)
  55. BEGIN
  56.   Conversions.ConvertToString(x,10H,FALSE,T,Dummy);
  57.   Le:=Length(T);
  58.   T[Le]  :='H';
  59.   T[Le+1]:=NUL;
  60.   InOut.WriteStringRight(T,L)
  61. END WriteLongHex;
  62.  
  63. PROCEDURE WriteAdr   (x : ADDRESS; 
  64.                       L : CARDINAL); (* min. length *)
  65. VAR R : AddCard;
  66. BEGIN
  67.   R.A:=x;
  68.   WriteLongCard(R.C,L)
  69. END WriteAdr;
  70.  
  71. PROCEDURE WriteAdrOct(x : ADDRESS; 
  72.                       L : CARDINAL); (* min. length *)
  73. VAR R : AddCard;                      
  74. BEGIN
  75.   R.A:=x;
  76.   WriteLongOct(R.C,L)
  77. END WriteAdrOct;
  78.  
  79. PROCEDURE WriteAdrHex(x : ADDRESS; 
  80.                       L : CARDINAL); (* min. length *)
  81. VAR R : AddCard;                      
  82. BEGIN
  83.   R.A:=x;
  84.   WriteLongHex(R.C,L)
  85. END WriteAdrHex;
  86.  
  87. PROCEDURE ReadLongInt(VAR x : LONGINT);
  88. BEGIN
  89.   InOut.ReadString(T);
  90.   IF InOut.Done THEN
  91.     InOut.ConvFromStr(T,res,MAX(LONGINT),TRUE,Done);
  92.     IF Done THEN x:=res END
  93.   ELSE
  94.     Done:=FALSE
  95.   END
  96. END ReadLongInt;
  97.   
  98. PROCEDURE ReadLongCard(VAR x : LONGCARD);
  99. BEGIN
  100.   InOut.ReadString(T);
  101.   IF InOut.Done THEN
  102.     InOut.ConvFromStr(T,res,MAX(LONGCARD),FALSE,Done);
  103.     IF Done THEN x:=res END
  104.   ELSE
  105.     Done:=FALSE
  106.   END
  107. END ReadLongCard;
  108.  
  109. PROCEDURE ReadAdr(VAR A : ADDRESS);
  110. VAR R : AddCard;
  111. BEGIN
  112.   ReadLongCard(R.C);
  113.   IF Done THEN A:=R.A END
  114. END ReadAdr;
  115.  
  116. END (* IMPLEMENTATION MODULE *) LongInOut.
  117.